package Thread;
// 使用Java 8中的lambda表达式简化了Runnable接口的实现
// 用Java中的Thread类和Lambda表达式来创建并启动一个新的线程
// 省去了显式声明和重写run方法，代码简化
// ()->{...}实际上是一个Runnable接口的实例，Runnable这个接口有一个唯一的抽象方法run,{...}隐式重写了run
/**
 * 1.使用Java 8中的lambda表达式简化了Runnable接口的实现： 在Java 8之前，创建一个线程通常需要创建一个实现Runnable接口的类，
 * 并重写run方法。Java 8引入了lambda表达式，允许以更简洁的方式实现只有一个抽象方法的接口，这就是所谓的函数式接口。
 * 2.用Java中的Thread类和Lambda表达式来创建并启动一个新的线程： 您可以使用Thread类的构造器来接收一个Runnable对象，
 * 并且可以直接传递一个lambda表达式，该表达式是Runnable接口的实例。
 * 3.省去了显式声明和重写run方法，代码简化： Lambda表达式允许您无需显式声明一个类并实现Runnable接口，直接在创建线程时内联定义run方法的内容。
 * 4.()->{...}实际上是一个Runnable接口的实例： 这一点是正确的。()->{...}是一个lambda表达式，它符合Runnable接口的签名，
 * 因为Runnable接口只有一个无参数的run方法。因此，这个lambda表达式可以被视为Runnable的一个实例。
 * 5.Runnable这个接口有一个唯一的抽象方法run，{...}隐式重写了run： 这也是正确的。在lambda表达式中，
 * 花括号{...}内的代码块隐式地实现了run方法的内容。在这个代码块中，您可以编写任何您希望在run方法中执行的代码。
 * */
public class demo5 {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(() ->{
            while (true) {
                System.out.println("hello thread");
                try{
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });

        t.start();

        while(true) {
            System.out.println("hello main");
            Thread.sleep(1000);
        }
    }
}
